from rest_framework import serializers
from books.models import HeroInfo


class HeroSerializer(serializers.ModelSerializer):
    # ModelSerializer和Serialize    ModelSerializer继承了Serialize
    # 1、可以根据指定的模型类字段自动生成序列化器字段
    # 2、帮助实现了create和update方法
    # 3、帮助实现了唯一值验证方法 模型类中如果指定了字段选项unique=True ，那么序列化器回自定进行唯一值验证
    # 显式指明字段，重写原有字段内容
    is_delete = serializers.BooleanField(default=False)

    # 除了可以指定已有字段，还以指定新字段
    # btitle = serializers.CharField(read_only=True, max_length=100)

    class Meta:
        # 指定模型类
        model = HeroInfo
        # 指定字段  '__all__' 指定英雄表中的所有字段作为序列化器字段
        fields = '__all__'
        # fields = ['hname', 'id', 'hgender']
        # 取反 除了该字段都返回
        # exclude = ['is_delete']
        # 修改增加选项参数
        extra_kwargs = {
            'hcomment': {
                'min_length': 1
            }
        }

    def validate(self, attrs):
        """
            验证数据
        :param attrs:
        :return:
        """
        if attrs['hname'] == 'python':
            raise serializers.ValidationError('英雄名称不能为python')

        return attrs


